package com.tsmti.interceptor;

import com.tsmti.core.common.constant.DataBaseConstants;
import com.tsmti.util.UserUtils;
import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;

import java.io.Serializable;
import java.util.Date;

/**
 * @Package：com.tsmti.core.interceptor
 * @Class：HibernateInterceptor
 * @Description： 实现创建人，创建时间，创建人名称自动注入; 修改人,修改时间,修改人名自动注入;
 * @Author：zcw
 * @Date：Created in 2018/5/15 22:57
 * @Company:
 * @Version：
 * @Modified By:
 */
public class HibernateInterceptor extends EmptyInterceptor {
    private static final long serialVersionUID = 1L;

    /**
     * 保存
     */
    @Override
    public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
        // 获得用户
        try {
            // 添加数据
            for (int index = 0; index < propertyNames.length; index++) {
                if (DataBaseConstants.DEL_FLAG.equals(propertyNames[index])) {
                    /* 使用拦截器将对象的"创建时间"属性赋上值 */
                    if (state[index] == null) {
                        state[index] = "0";
                    }
                    continue;
                }
                /* 找到名为"添加人"的属性 */
                if (DataBaseConstants.CREATE_USER.equals(propertyNames[index])) {
                    /* 使用拦截器将对象的"创建时间"属性赋上值 */
                    if (state[index] == null) {
                        state[index] = UserUtils.getUserName();
                    }
                    continue;
                }
                /* 找到名为"创建时间"的属性 */
                if (DataBaseConstants.CREATE_DATE.equals(propertyNames[index])) {
                    /* 使用拦截器将对象的"创建时间"属性赋上值 */
                    if (state[index] == null) {
                        state[index] = new Date();
                    }
                    continue;
                }
                /* 找到名为"创机构"的属性 */
                if (DataBaseConstants.ORGANIZATION_ID.equals(propertyNames[index])) {
                    /* 使用拦截器将对象的"创建时间"属性赋上值 */
                    if (state[index] == null) {
                        state[index] = UserUtils.getOrgId();
                    }
                    continue;
                }
            }
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
        return true;
    }

    /**
     * 更新
     */
    @Override
    public boolean onFlushDirty(Object entity, Serializable id, Object[] state, Object[] previousState,
                                String[] propertyNames, Type[] types) {

        // 添加数据
        for (int index = 0; index < propertyNames.length; index++) {
            /* 找到名为"修改人"的属性 */
            if (DataBaseConstants.UPDATE_USER.equals(propertyNames[index])) {
                /* 使用拦截器将对象的"创建时间"属性赋上值 */
                if (state[index] == null) {
                    state[index] = UserUtils.getUserName();
                }
                continue;
            }
            /* 找到名为"修改时间"的属性 */
            if (DataBaseConstants.UPDATE_DATE.equals(propertyNames[index])) {
                /* 使用拦截器将对象的"修改时间"属性赋上值 */
                if (state[index] == null) {
                    state[index] = new Date();
                }
                continue;
            }
        }
        return true;
    }
}
